﻿using Syspetro.Deploy.Jwt;
using Syspetro.DepRedis;
using System;

namespace Syspetro.DepRedis
{
    public class TokenRedisCache : ITokenCache
    {
        readonly RedisHelper redis = new("TokenCache");
        public TimeSpan ExpireTimeSpan { get; set; }
        public void Add(Guid userid, Guid id, string token)
        {
            var _id = redis.StringGet(userid.ToString());
            if (!string.IsNullOrEmpty(_id))
            {
                redis.KeyDelete(_id);
            }
            redis.StringSet(userid.ToString(), id.ToString(), ExpireTimeSpan);
            redis.StringSet(id.ToString(), token, ExpireTimeSpan);
        }
        public bool Refresh(Guid id, string token)
        {
            if (redis.KeyExists(id.ToString()))
            {
                redis.StringSet(id.ToString(), token, ExpireTimeSpan);
                return true;
            }
            return false;
        }
        public string GetByToken(Guid id)
        {
            return redis.StringGet(id.ToString());
        }
        public void RemoveByUser(Guid userid, Guid tokenid)
        {
            var id = redis.StringGet(userid.ToString());
            if (!string.IsNullOrEmpty(id))
            {
                if (id == tokenid.ToString())
                {
                    redis.KeyDelete(id);
                    redis.KeyDelete(userid.ToString());
                }
            }
        }
    }
}
